#pragma once

#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/epoll.h>

#include "SafeQue.h"
#include "UManage.h"
#include "Msg.h"


//网络模块 + 业务模块
class CChatServer
{
public:
    CChatServer();
    ~CChatServer();
public:
    bool Init();
    bool StartThread();
public:
    static void* WorkStart(void* arg);
    static void* RecvStart(void* arg);
    static void* SendStart(void* arg);
public:
    //注册请求的处理
    void RegisterHandle(CMsg& ms);
    //登录请求的处理
    void LoginHandle(CMsg& ms);
    //登录时获取好友列表
    void GetFriendHandle(CMsg& ms);
    //处理聊天
    void ChatHandle(CMsg& ms);
    //处理添加好友
    void AddFriendHandle(CMsg& ms);
    //处理添加好友响应
    void AddFriendResHandle(CMsg& ms);
    //处理退出请求
    void ExitHandle(CMsg& ms);
private:
    //UserManege供工作线程使用
    CUserManage* user_;

    //请求队列和响应队列
    CSafeQueue<CMsg>* request_que_;
    CSafeQueue<CMsg>* response_que_;

    //工作线程个数
    int work_thread_size_;

    //listen_fd_
    int listen_fd_;

    //epoll_fd_
    int epoll_fd_;
};